package com.auto.service.impl;

import java.util.Map;

import com.pojo.StateInfo;
import freemarker.template.Configuration;

/**
 * 编写器
 * 若要编写一个自己的编写器，需要继承此接口
 * 示例请看impl 包下的Coder
 * @author chenfuqiang
 *
 */
public interface Coder {
	
	/**
	 * 具体如何编写
	 * cfg : FMConfiguration 获取
	 * root: 拼凑需要替换的变量
	 * isOverride:如果发现了已经有自动生成的代码文件了是否替换
	 * @return
	 */
	public abstract StateInfo coder(Configuration cfg, Map<String, Object> root, boolean isOverride);
	/**
	 * 删除已经自动根据模板生成的文件
	 * @param cfg
	 * @param root
	 * @param isOverride
	 * @return
	 */
	public abstract StateInfo decoder(Configuration cfg, Map<String, Object> root, boolean isOverride);
	/**
	 * 根据pojo来获取参数root
	 * @param pojo
	 * @return
	 */
	public abstract Map<String,Object> getRoot(Class<?> pojo);
	/**
	 * 目标包名
	 * @return
	 */
	public abstract String getTargetPackage();
	/**
	 * 目标路径
	 * @return
	 */
	public abstract String getTargetPath();
	/**
	 * src路径
	 * @return
	 */
	public abstract String getSrcPath();
	/**
	 * 获取模板路径和名称
	 * @return
	 */
	public abstract String getFtlPath();
	/**
	 * 
	 * 获取文件结尾名称
	 * @return
	 */
	public abstract String getClassTail();
	
	
}
